@怪人
4年前 提问
2个回答

正则表达式书写规范有哪些

正则表达式(regular expression)描述了一种字符串匹配的模式(pattern),可以用来检查一个串是否含有某种子串、将匹配的子串替换或者从某个串中取出符合某个条件的子串等。有哪些书写规范?

齐士忠
4年前

正则表达式
grep-ni’the’test.txt-找出包含the的行,大小写都可以
grep-n’t[ea]st’test.txt-找出包含test或者tast的行
grep-n’oo’test.txt-找出包含oo的行
grep-n’[g]oo’test.txt-找出包含goo的行
grep-n’^[a-z]oo’test.txt-找出小写字母为行首紧跟字母oo的行
grep-n[0-9]test.txt-找出包含数字的行
grep-n’^[a-z]’test.txt-找出小写字母开头的行
grep-n’^[a-zA-Z]’test.txt-找出小写大写字母开头的行
grep-n’[.$]’test.txt-找出.结尾的行
grep-n’g..d’test.txt-找出包含g某某d的行
grep-n’o‘test.txt-找出包含零个o或者无数个o的行
grep-n’oo
‘test.txt-找出至少包含一个o或者无数个o的行
grep-n’g.g’test.txt-找出包含g与g之间无字符或任意字符的行
grep-n’o{2}‘test.txt-找出包含oo的行
grep-n’o{2,5}‘test.txt-找出包含oo到ooooo的行
grep-n’o{2,}‘test.txt-找出包含oo到若干o的行
egrep-n’go+d’test.txt-找出包含g与g之间一个o或者多个o的行
egrep-n’go?d’test.txt-找出包含g与g之间零个o或者一个o的行
egrep-n’go
d’test.txt-找出包含g与g之间零个o或者任意o的行

delay
3年前
官方采纳

正则书写的关键点只有三个:一是所有基础表达式默认都能且只能匹配一个字符,二是除非其后给出限定符另外指出匹配次数,三是限定符只限定在其前面的那一个表达式(^定位符只对其后一个表达式生效,$定位符只对其前一个表达式生效)。

另外记住以下规则:

正则元字符

元字符是表示其在正则表达式上下文中的行为,下面介绍常用的元字符以及作用:

  • “^”:匹配输入字符串的开始位置

  • “$”:匹配输入字符串的结束位置

  • “*”:匹配前面的子表达式零次或多次。例如,zo* 能匹配 “z” 以及 “zoo”。* 等价于{0,}。

  • “+”:匹配前面的子表达式一次或多次。例如,’zo+’ 能匹配 “zo” 以及 “zoo”,但不能匹配 “z”。+ 等价于 {1,}。

  • “?”:匹配前面的子表达式零次或一次。例如,”do(es)?” 可以匹配 “do” 或 “does” 。? 等价于 {0,1}。

  • “":将下一个字符标记为一个特殊字符、或一个原义字符、或一个 向后引用、或一个八进制转义符

  • “\b” :匹配一个单词边界,也就是指单词和空格间的位置

  • “\d”: 匹配一个数字字符。等价于 [0-9]

  • “\D”:匹配一个非数字字符。等价于 [^0-9]

  • “\f”: 匹配一个换页符。等价于 \x0c 和 \cL

  • “\n”: 匹配一个换行符。等价于 \x0a 和 \cJ

  • “\r “:匹配一个回车符。等价于 \x0d 和 \cM

  • “\w”:匹配字母,数字,下划线

正则反义

反义的写法最简单,把字母改成大写就可以了,意思与原来的相反,比如

  • “\B”:匹配不是单词开头或结束的位置

  • “\S”:匹配任意不是空白符的字符

  • “\W” :匹配任意不是字母,数字,下划线 的字符

  • “\D”:匹配任意非数字的字符

  • “[^abc]” :匹配除了abc以外的任意字符

正则量词

量词记住三个就行了:贪婪(*)、懒惰/勉强(?)、占有(+)

  • ”,重复零次或更多,字符会首先会尽可能多的匹配整个字符串,如果失败,则回退一个字符,例如“a”会匹配a后面的所有的a

  • “?” ,重复零次或一次, 是从目标的起始位置开始尝试匹配,每次检查一个字符并且判断是否是要找的字符,直到字符串结尾处,例如:”bbbbbb” 匹配字符串中的b 正则 : “b?” 只会匹配一次,也就是结果只是单个字符b

  • “+” ,重复一次或更多次,它会覆盖整个目标字符串,然后尝试寻找匹配内容 ,但它只尝试一次,例如:”cccccc” 匹配字符串中所有的c 正则: “c+” 会取到字符中所有的c字符